//!
/**
 ***********************************************************************************************************
 * <RBResourceManager implementation>
 ***********************************************************************************************************
 * @file RBResourceManager.cpp
 ***********************************************************************************************************/
#include "RBMainPCH.h"

/************************************************************************************************************
 * Includes
 ************************************************************************************************************/
#include "RBResourceManager.h"

#include "RBHardwareBufferManager.h"
#include "RBRenderer.h"
#include "RBSystem.h"

/************************************************************************************************************
 * Macros
 ************************************************************************************************************/

/************************************************************************************************************
 * Classes implementation
 ************************************************************************************************************/

/************************************************************************************************************/

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
RBResourceManager::RBResourceManager()
{

}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
RBResourceManager::~RBResourceManager()
{

}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
void RBResourceManager::AddPath( const RBString& strDir )
{
    m_vDirs.push_back(strDir);
}

/***********************************************************************************************************
 * 
 ***********************************************************************************************************/
RBTexture* RBResourceManager::GetTexture( const RBString& strFile )
{
    RBString strLocalName = RBStringTools::GetLeafName(strFile);
    std::map<RBString, RBTexturePtr>::iterator iter = m_mTextures.find(strLocalName);
    if (iter != m_mTextures.end())
    {
        return iter->second;
    }

    // We didn't find the texture: look in all paths to see if the file exists
    for (uint32 ui = 0; ui < m_vDirs.size(); ++ui)
    {
        RBString strTexName = m_vDirs[ui] + "/" + strLocalName;
        if (RBSystem::File::Exists(strTexName))
        {
            // Try to load it
            RBTexture* pTex = RBRenderer::GetSingleton()->GetHBMgr()->CreateTexture(strTexName.c_str());
            if (pTex)
            {
                m_mTextures[strLocalName] = pTex;
                return pTex;
            }
        }
    }
    return NULL;
}